# 迭代器
# 在Python中一切皆对象,对象的抽象就是类,而对象的集合就是容器
# 列表list、元组tuple、字典dict、集合set都是容器
# 所有的容器都是可迭代的(iterable)对象
# 迭代器(iterator)提供了一个next的方法,调用这个方法后,要么得到这个容器的下一个对象,要么得到一个StopIteration的错误
# 可迭代对象,通过iter()函数返回一个迭代器,再通过next()函数就可以实现遍历.for in语句本质上就是将这个迭代过程隐式化了


# 判断一个对象是否是可迭代对象
def is_iterable_obj(obj):
    try:
        # 如果可以调用iter()函数返回一个迭代器,那么就是可迭代对象
        iter(obj)
        return True
    except TypeError:
        return False


if __name__ == '__main__':
    # 这里除了int之外,其他类型的对象都是可迭代的
    objs = [1234,
            '1234',
            [1, 2, 3, 4],
            (1, 2, 3, 4),
            {1, 2, 3, 4},
            {1: 1, 2: 2, 3: 3, 4: 4}
            ]

    for obj in objs:
        print(f'type: {type(obj)}, is iterable: {is_iterable_obj(obj)}')
